home *** CD-ROM | disk | FTP | other *** search
-
- #include "CIncludesCode.h"
- #include <Memory.h>
- #include <StdIO.h>
-
-
- extern long numFiles;
- extern ptrArray *argvPtr;
- extern strArray **filesHdl;
- extern Handle dependencies;
-
- Handle tempDependencies;
-
-
-
- Boolean isDependent( char *depPtr, short oldFile, short newFile )
- { // true if oldFile dependent on newFile
-
- return ( (Boolean) (*(depPtr + (oldFile * numFiles) + newFile )) );
- }
-
-
- void setDependency( Handle depHdl, short oldFile, short newFile, Boolean value )
- {
- *(*depHdl + (oldFile * numFiles) + newFile ) = (char) value;
- }
-
-
- long nextInclude( Handle dataHdl, long pos, long limit )
- { // returns offset of next #include filename
-
- char *p = StripAddress( *dataHdl + pos );
- char *q = StripAddress( *dataHdl + limit );
- char ch;
-
- while ( p < q )
- {
- ch = *p++;
- if ( ch == '#' )
- if ( isString( p, "include" ) )
- return ( (long) (p - StripAddress( *dataHdl )) );
- else
- while ( (*p++ != '\n') && (p < q) ) ;
- else if ( ch > ' ' )
- while ( (*p++ != '\n') && (p < q) ) ;
- }
- return limit;
- }
-
-
- void extractFileName( char *dest, char *src )
- {
- while ( (*src != '<') && (*src != '"') )
- ++src;
- ++src;
-
- while ( (*src != '>') && (*src != '"') )
- *dest++ = *src++;
- *dest = '\0';
- }
-
-
- void extractIncludes( Handle dataHdl, short curFile )
- {
- long pos = 0;
- short index = 0;
- short fileIndex;
- long limit = GetHandleSize( dataHdl ) - 1;
- char s[64];
-
- while ( (pos = nextInclude( dataHdl, pos, limit )) < limit )
- {
- extractFileName( s, (*dataHdl + pos) );
-
- if ( (fileIndex = getFileIndex( s )) != -1 )
- setDependency( tempDependencies, curFile, fileIndex, true );
- }
- }
-
-
- void expandDependencies( short curExpanded, short curFile )
- {
- short i;
-
- setDependency( dependencies, curExpanded, curFile, true );
-
- for ( i = 0; i < numFiles; ++i )
- if ( isDependent( *tempDependencies, curFile, i ) &&
- !isDependent( *dependencies, curExpanded, i ) )
- expandDependencies( curExpanded, i ); // recursion
- }
-
-
- void makeDependencyArray()
- {
- short i;
- Handle dataHdl;
-
- fprintf( stderr, "Collecting \"#Includes\" data...\n" );
-
- tempDependencies = NewHandleClear( numFiles * numFiles );
- checkMemory();
-
- for ( i = 0; i < numFiles; ++i )
- {
- dataHdl = loadDataFile( (*argvPtr)[i+2] );
- extractIncludes( dataHdl, i );
- DisposHandle( dataHdl );
- }
-
- fprintf( stderr, "Calculating dependency array...\n" );
-
- dependencies = NewHandleClear( numFiles * numFiles );
- checkMemory();
-
- for ( i = 0; i < numFiles; ++i )
- expandDependencies( i, i );
-
- DisposHandle( tempDependencies );
- }
-
-
- void printDependencyArray() /* 12-page printout of filesnames and dependencies */
- {
- short i, j;
-
- fprintf( stderr, "\n" );
-
- for ( i = 0; i < numFiles; ++i )
- {
- fprintf( stderr, "\nfile: %s\n", (**filesHdl)[i] );
- for ( j = 0; j < numFiles; ++j )
- if (isDependent( *dependencies, i, j ) )
- fprintf( stderr, "%s\n", (**filesHdl)[j] );
- }
- }
-